From: Ray Strode Date: Thu, 7 Feb 2019 19:27:35 +0000 (-0500) Subject: windowManager: ensure actor resize clone dies with actor X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~861^2^2~3 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=8e51fee5c1592202e7b3310505935509047f8709;p=gnome-shell.git windowManager: ensure actor resize clone dies with actor If a window gets destroyed right before it's resize animation starts the user can get confronted with an undead zombie clone that doesn't go away. This commit makes sure said clones get reaped with their actors. https://gitlab.gnome.org/GNOME/gnome-shell/issues/1166 --- diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js index 09eeac105..b9f5fef46 100644 --- a/js/ui/windowManager.js +++ b/js/ui/windowManager.js @@ -1488,8 +1488,13 @@ var WindowManager = class { if (this._clearAnimationInfo(actor)) this._shellwm.completed_size_change(actor); + let destroyId = actor.connect('destroy', () => { + this._clearAnimationInfo(actor); + }); + actor.__animationInfo = { clone: actorClone, - oldRect: oldFrameRect }; + oldRect: oldFrameRect, + destroyId: destroyId }; } _sizeChangedWindow(shellwm, actor) { @@ -1550,6 +1555,7 @@ var WindowManager = class { _clearAnimationInfo(actor) { if (actor.__animationInfo) { actor.__animationInfo.clone.destroy(); + actor.disconnect(actor.__animationInfo.destroyId); delete actor.__animationInfo; return true; }